<?php

App::uses('AppController', 'Controller');

class UsersController extends AppController {

	var $name = 'Users';

	var $allowActions = array( 'login', 'logout' );
	var $components = array( 'Crypter' );

	var $uses = array('User');


	/**
	 * Add
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function admin_add($id = null)
	{
		if(!empty($this->request->data))
		{
			$data = &$this->request->data['User'];

			// Kiem tra password cu
			$oldpass = false;
			if( empty( $data['password'] )) {
				if(!empty($data['oldpass'])) {
					$data['password'] = $data['oldpass'];
					$oldpass = true;
				} else {
					$this->User->validationErrors['password'] = array('Password not empty.');
				}
			}

			// Kiem tra errors
			$this->User->set($data);
			$errors = $this->User->invalidFields();

			//Save
			if(empty($errors)) {
				// Kiem tra password
				if(!$oldpass)
					$data['password'] = $this->Auth->password($data['password']);

				// kiem tra edit
				if( empty($data['id']) ) {
					unset($data['id']);
				}

				if($this->User->save($data, false)) {

					$u = $this->Auth->user();
					$u['password'] = $data['password'];
					$u['username'] = $data['username'];
					$u['full_name'] = $data['full_name'];
					$this->Auth->login($u);

					$this->Session->setFlash('Sửa thông tin thành công.', 'success');
					$this->redirect('/admin/users/add/'. $this->User->id);
				} else {
					$this->Session->setFlash('Sửa thông tin thất bại. Vui lòng xem lại thông tin bên dưới', 'error');
				}
			} else {
				$this->Session->setFlash('Sửa thông tin thất bại.', 'error');
			}
		}

		// Truong hop show edit
		if( !empty( $id )) {
			$info = $this->User->getInfoById($id);

			if(!empty($info)) {
				$info['User']['oldpass'] = $info['User']['password'];
				$info['User']['password'] = '';
				$this->request->data = $info;
			}
		}

		$this->render('/Users/profile');
	}

	/**
	 * Login
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function login()
	{
		$u = $this->Auth->user();
	
		if( !empty($u ) )
		{
			if(!$this->referer(array('controller' => 'users', 'action' => 'logout')) && !$this->referer(array('controller' => 'users', 'action' => 'login'))){
				$this->redirect($this->referer());
			} else {
				$this->redirect('/');
			}
		}
	
		if( !empty( $this->request->data ) )
		{
			if($this->_validate_login()) {
				$url = '/';	
				if($this->Session->check('referer') ) {
					$url = $this->Session->read('referer');
					$this->Session->delete('referer');
				}
				$this->redirect($url);
			} else {
				$this->request->data['User']['password'] = "";
				$this->Session->setFlash( __('Đăng nhập thất bại. Xin kiểm tra lại thông tin đăng nhập.'), 'error');
			}
		} else {
			
			if( $this->referer(null, true) != Router::url('/users/logout') && $this->referer(null, true) != Router::url('/users/login')){ 
				$this->Session->write('referer', $this->referer());
			}
		}
	}
	
	/**
     * Login
     *
     * @param type  meta
     * @return type  meta
     * @access public
     */
    function admin_login()
    {
    	$this->layout = 'login';
        $u = $this->Auth->user();

        if( !empty($u ) )
        {
            $this->redirect('/admin');
        }

        if( !empty($_GET['denied']) && $_GET['denied'] == 1 )
            $this->Session->setFlash( __('Bạn không được phép truy cập vào các chức năng hệ thống.', 'error'));
		
        if( !empty( $this->request->data ) )
        {
	        if($this->_validate_login()) {
	        	$this->redirect('/admin');
	        } else {
	        	$this->request->data['User']['password'] = "";
	        	$this->Session->setFlash( __('Đăng nhập thất bại. Xin kiểm tra lại thông tin đăng nhập.'), 'error');
	        }
        }
    }
    
    /**
     * validate login
     *
     * @param type  meta
     * @return type  meta
     * @access public
     */
   	function _validate_login(){
			
		// update password
		$this->request->data['User']['password'] = $this->Auth->password( $this->request->data['User']['password'] );
		// pr($this->request->data);
		// exit;
		
		$user = $this->User->validateLogin( $this->request->data );
		
		if( ! empty( $user ) ) {
			// create full name
			$this->Auth->login( $user['User'] );
			
			// create security string
			$this->Session->write( 'security_key', $this->Crypter->alphaID( strtotime( date( "Y-m-d H:i:s" ) ) ) );
			return true;
		} else {
			return false;
		}
   	}

	/**
     * Logout
     *
     * @param type  meta
     * @return type  meta
     * @access public
     */
    function admin_logout()
    {
       // $this->AuthExtension->logout();
        $this->Session->destroy();
        if( !empty($_GET['denied']) && $_GET['denied'] == 1 )
            $this->redirect( "/admin/users/login/?denied=1" );
        else
            $this->redirect( "/admin/users/login" );
    }
}
